# ndarray类型，创建numpy数组
import numpy as np

# 创建一维数组
a = np.array([1, 2, 3, 4])
print(a)
print(type(a))
print(a.dtype)
print(a.shape) # 输出(4,) 表示4个元素

# 创建二维数组
b = np.array([[1, 2, 3], [4, 5, 6]])
print(b)
print(b.shape) # 输出(2, 3) 表示2行 3列

# 创建三维数组
c = np.array([
    [[1, 2, 3], [4, 5, 6]], 
    [[7, 8, 9], [10, 11, 12]]])
print(c)
print(c.shape) # 输出(2, 2, 3) 表示2个2行3列的二维数组

# shape属性 元组，几个数就是几维，最后一个维度个数就是最后一个数轴的元素个数
print("-----------------------")
# 通过内置函数创建numpy数组 arange
d = np.arange(10) # 生成0-9的数组
print(d)

# 内置函数linspace创建等间隔数组
h = np.linspace(0, 1, 5) # 生成0-1的数组，5个元素
print(h)  # [0.   0.25 0.5  0.75 1.  ]

e = np.arange(1, 10, 2) # 生成1-9的数组，步长为2
print(e)
# 内置函数zeros和ones创建全0和全1数组
f = np.zeros((2, 3))
print(f) # [[0. 0. 0.], [0. 0. 0.]]
g = np.ones((2, 3))
print(g) # [[1. 1. 1.], [1. 1. 1.]]

# 内置函数eye创建单位矩阵
i = np.eye(3) # 创建3行3列的单位矩阵
print(i) 
'''
[[1. 0. 0.], 
 [0. 1. 0.], 
 [0. 0. 1.]]
'''

# 内置函数random创建随机数组
j = np.random.random((2, 3)) # 创建2行3列的随机数组 
print(j)  
'''
[[0.12345678 0.12345678 0.12345678]
 [0.12345678 0.12345678 0.12345678]]
'''
# 内置函数random创建随机整数数组
k = np.random.randint(0, 10, (10, 10)) # 创建2行3列的随机整数数组，范围0-10 [0, 10)
print(k)    # [[7 4 1]
            # [5 8 2]
            # [9 0 6]]

# 内置函数random创建随机浮点数数组
l = np.random.rand(2, 3, 4) # 创建2行3列的随机浮点数数组，范围0-1
print(l)
print(l.shape) # (2, 3, 4)
print(l.dtype) # float64
print(l.size) # 24
print(l.ndim) # 3

# numpy数组索引
print("-----------------------")
# 一维数组索引
m = np.arange(10)
print(m[1]) # 0

# 二维数组索引
n = np.array([[1, 2, 3],
              [4, 5, 6]])
print(n[1, 1]) # 6

# 三维数组索引
o = np.array([
    [[1, 2, 3], [4, 5, 6]], 
    [[7, 8, 9], [10, 11, 12]]])
print(o.shape) # (2, 2, 3)
print(o[1, 0, 1]) # 8

# numpy数组切片
print("-----------------------")
# 一维数组切片
p = np.arange(10) # [0 1 2 3 4 5 6 7 8 9]
print(p[1:5]) # [1 2 3 4]
print(p[1:5:2]) # [1 3]
print(p[::-1]) # [9 8 7 6 5 4 3 2 1 0]

# 二维数组切片
q = np.array([[1, 2, 3],
              [4, 5, 6]])
print(q[1, 1:3]) # [5 6]
print(q[1, ::-1]) # [6 5 4]
print(q[:, 1:3]) # [[2 3], [5 6]]

print("-----------------------")
# 三维数组切片
o = np.array([
    [[1, 2, 3], 
     [4, 5, 6]], 
    [[7, 8, 9], 
     [10, 11, 12]]])
# 三维数组切片
print(o[:, 1, 1:3]) # 

